home *** CD-ROM | disk | FTP | other *** search
/ Micro R&D 5: Mand 2000 / Mand 2000 - Micro R&D CD-ROM Vol 5.iso / arexx / calcsequence.mnd2 next >
Text File  |  1995-06-13  |  5KB  |  145 lines

  1. /* This script is supplied with the Mand2000 demo and release */
  2. /* versions and may be freely distributed. */
  3. /* Copyright 1993 Cygnus Software. */
  4.  
  5. /* An ARexx programming for rendering a series of pictures. */
  6.  
  7. portname = address()    /* Retrieve the current port name. */
  8. /* If the portname does not start with MAND2000 then this script must */
  9. /* have been run with rx, rather than from Mand2000.  Therefore we */
  10. /* need to set the port name.  We do not always set the port name */
  11. /* because it is better to let Mand2000 set it for us, so that */
  12. /* this script can be used with windows other than the one with */
  13. /* port name MAND2000.1. */
  14. if (left(portname, 8) ~= "MAND2000") THEN
  15.     address 'MAND2000.1'
  16.  
  17. options results
  18.  
  19. /* Set up these variables with the number of pictures that you want */
  20. /* calculated and the names of all of the file names.  They will be */
  21. /* loaded in one at a time and saved when they are finished calculating. */
  22. /* This is typically used if you have a series of pictures which will */
  23. /* all take a long time to calculate. */
  24. frames.0 = '"renderdir:Compound Eye"'
  25. frames.1 = '"renderdir:ExoSkeletons"'
  26. /*frames.2 = '"renderdir:CompoundEyeMorphed"'*/
  27. /*frames.3 = '"renderdir:Mandelbrot Frost"'*/
  28. /*frames.4 = '"renderdir:Needle"'*/
  29. /*frames.5 = '"renderdir:Russian Circles"'*/
  30. /*frames.6 = '"renderdir:Frost Spirals"'*/
  31.  
  32.  
  33. /* Parse out the command option.  This script is called when the */
  34. /* user wants a sequence started, when the user wants a sequence */
  35. /* finished and whenever one of the pictures in the sequence is done.  */
  36.  
  37. parse arg command
  38.  
  39. command = upper(command)    /* Make sure the command is in upper case. */
  40.  
  41. if (command = START) then
  42.     CALL StartCalcSequence()
  43. else if (command = STOP) then
  44.     CALL StopCalcSequence()
  45. else
  46.     CALL ContinueCalcSequence(SAVE)
  47.  
  48. Exit
  49.  
  50.  
  51.  
  52. /* Load the first picture and set up everything so that the script */
  53. /* will continue. */
  54.  
  55. StartCalcSequence:
  56.     CALL SETCLIP("Mand2000SequenceNum", 0)
  57.  
  58.     getattr stem WindowVar    /* Get the status structure for the window - put it in WindowVar. */
  59.     address value WindowVar.masterarexx    /* Briefly go to the global ARexx port*/
  60.                         /* - as specified in the window structure. */
  61.     getattr stem Settings
  62.     CALL SETCLIP("Mand2000Width", Settings.ScreenWidth)
  63.     CALL SETCLIP("Mand2000Height", Settings.ScreenHeight)
  64.     CALL SETCLIP("Mand2000Depth", Settings.ScreenDepth)
  65.     CALL SETCLIP("Mand2000DisplayID", Settings.DisplayID)
  66.     CALL SETCLIP("Mand2000RenderType", Settings.RenderType)
  67. /*    say settings.SCREENwidth settings.SCREENheight settings.SCREENdepth SETTINGS.DISPLAYID*/
  68. /*    say Settings.RenderType*/
  69.     address    /* Reset to the previous port. */
  70.  
  71.     /* Put a command in the user menu for stopping the sequence creation. */
  72.     menu '"------------------------"'
  73.     menu '"Stop Sequence"' calcsequence stop
  74.  
  75.     /* Tell Mand2000 to reinvoke this script whenever a picture */
  76.     /* finishes calculating. */
  77.     EVENTACTION PICTUREDONE calcsequence
  78.     OPEN filename frames.0
  79.     if (RC ~= 0) THEN DO
  80.         CALL StopCalcSequence()
  81.         REQUESTNOTIFY "Couldn't load first file.  This|script must be modified to render|your pictures by putting their|names in the script, or else save|the frames to be rendered as|ram:frame1, ram:frame2, etc."
  82.         EXIT
  83.         END
  84.     SETSCREEN settings.screenwidth settings.screenheight settings.screendepth settings.displayid
  85.     SETRENDER Settings.RenderType
  86.     BACKDROP ON
  87. /*    SETSCREEN Settings.Width Settings.Height Settings.Depth Settings.DisplayID*/
  88.     GETATTR stem PROJ
  89.     if (PROJ.DONE = 1) THEN
  90.         CALL ContinueCalcSequence(NOSAVE)
  91.     RETURN 0
  92.  
  93.  
  94.  
  95. StopCalcSequence:
  96.     CALL SETCLIP("Mand2000SequenceNum")
  97.     /* Tell Mand2000 to stop invoking this script whenever a picture */
  98.     /* finishes calculating. */
  99.     EVENTACTION PICTUREDONE
  100.     /* Remove the `Stop Sequence' menu. */
  101.     CLEARNMENUS 2
  102.     RETURN 0
  103.  
  104.  
  105.  
  106. /*
  107.     This portion of the script saves the current picture if necessary
  108. and then loads the next one if there is one.
  109.     */
  110.  
  111. ContinueCalcSequence:
  112.     parse arg savemode
  113.     if (savemode = save) THEN DO
  114.         SAVE
  115.         if (RC ~= 0) THEN DO
  116.             REQUESTNOTIFY "Error in saving file.|Aborting sequence."
  117.             CALL StopCalcSequence()
  118.             EXIT
  119.             END
  120.         END
  121.     SequenceNum = GETCLIP("Mand2000SequenceNum")
  122.     SequenceNum = SequenceNum + 1
  123.     CALL SETCLIP("Mand2000SequenceNum", SequenceNum)
  124.     name = upper(frames.SequenceNum)
  125.     fakename = upper("frames." || SequenceNum)
  126. /*    say name fakename*/
  127.     if (name = fakename) THEN DO
  128.         CALL StopCalcSequence()
  129.         EXIT
  130.         END
  131.     OPEN filename frames.SequenceNum
  132.     Width = GETCLIP("Mand2000Width")
  133.     Height = GETCLIP("Mand2000Height")
  134.     Depth = GETCLIP("Mand2000Depth")
  135.     DisplayID = GETCLIP("Mand2000DisplayID")
  136.     RenderType = GETCLIP("Mand2000RenderType")
  137.     /* Force the display to the desired screen mode. */
  138.     SETSCREEN Width Height Depth DisplayID
  139.     SETRENDER RenderType
  140.     BACKDROP ON
  141.     GETATTR stem PROJ
  142.     if (PROJ.DONE = 1) THEN
  143.         CALL ContinueCalcSequence(NOSAVE)
  144.     RETURN 0
  145.